from fontTools.ttLib import TTFont
# Image 图  ImageDraw 画笔  ImageFont指定字体
# 使用指定的字体 将字符绘制到一张 图张
from PIL import Image, ImageDraw, ImageFont
import io
from ddddocr import DdddOcr

ocr = DdddOcr(show_ad=False)


def get_font_maps(font_path):
    # 建立 字符映射

    # 加入 只有0-9 10个数字 可以手动观察映射关系
    # font_maps = {
    #     "": 7,
    #     "": 0,
    #     "": 1
    # }

    font_maps = {

    }

    # 指定解析的字体文件
    font = TTFont(font_path)

    # 2. 指定绘制的字体文件
    img_font = ImageFont.truetype(font_path, size=25)
    for code, name in font.getBestCmap().items():
        if code == 120:
            continue
        else:

            # 将字符 使用特定的字体文件 渲染到图上
            # print(code, chr(code), name)

            # 1. 创建32*32 白色 RGB图
            img = Image.new("RGB", (32, 32), (255, 255, 255))

            # 3.绘制图形到 图片
            draw = ImageDraw.Draw(img)
            draw.text((0, 0), chr(code), (0, 0, 0), font=img_font)

            # 4.保存图片 到本地 或者字节流
            # img.save(f'./static/fonts/imgs/{code}.png', "png")

            img_bytes = io.BytesIO()
            img.save(img_bytes, format="JPEG")
            # print(img_bytes.getvalue())

            r = ocr.classification(img_bytes.getvalue())
            # print(code, "识别结果", r)
            font_maps[code] = r

    print(f"字体映射表", font_maps)
    return font_maps

if __name__ == '__main__':
    get_font_maps("../static/fonts/file")